package com.youlu.campus.admin.zm.utils;

import com.youlu.campus.admin.zm.enums.RefundClickEnum;
import com.youlu.campus.admin.zm.msg.MsgObject;
import com.youlu.campus.admin.zm.msg.SmartMenuMsg;
import com.youlu.campus.admin.zm.msg.TextMsg;
import com.youlu.campus.entity.enums.ItemTypeEnum;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * @author : [dengbo]
 * @className : ZmMenuService
 * @description : [描述说明该类的功能]
 * @createTime : [2022/11/13 18:19]
 */
@Slf4j
public class ZmMenuUtils {
    private static SmartMenuMsg.SmartClickMsg DELIVERY_CONFIRM;
    private static SmartMenuMsg.SmartClickMsg DELIVERY_CANCEL;
    private static SmartMenuMsg.SmartClickMsg NOT_DELIVERY_LESS12_CONFIRM;
    private static SmartMenuMsg.SmartClickMsg NOT_DELIVERY_LESS12_CANCEL;
    private static SmartMenuMsg.SmartClickMsg NOT_DELIVERY_MORE12_CONFIRM;
    private static SmartMenuMsg.SmartClickMsg NOT_DELIVERY_MORE12_CANCEL;
    private static SmartMenuMsg.SmartClickMsg NOT_DELIVERY_REFUND_CONFIRM;
    private static SmartMenuMsg.SmartClickMsg NOT_DELIVERY_REFUND_CANCEL;
    private static SmartMenuMsg.SmartClickMsg END_FLOW;
    private static SmartMenuMsg.SmartClickMsg TRANSFER;
    private static SmartMenuMsg.SmartClickMsg END_FLOW_ALIAS;
    private static SmartMenuMsg.SmartClickMsg END_FLOW_NEW;

    static {
        Map<String, SmartMenuMsg.SmartClickMsg> map = new HashMap<>();
        for (RefundClickEnum refundClickEnum : RefundClickEnum.values()) {
            SmartMenuMsg.SmartClickMsg smartClickMsg = new SmartMenuMsg.SmartClickMsg();
            SmartMenuMsg.SmartClickContent ck = new SmartMenuMsg.SmartClickContent();
            ck.setId(String.valueOf((refundClickEnum.getId())));
            ck.setContent(refundClickEnum.getMsg());
            smartClickMsg.setClick(ck);
            map.put(refundClickEnum.name(), smartClickMsg);
        }
        for (Field field : ZmMenuUtils.class.getDeclaredFields()) {
            SmartMenuMsg.SmartClickMsg msg = map.get(field.getName());
            if (msg != null) {
                log.info("int static field:{}", field.getName());
                try {
                    field.setAccessible(true);
                    field.set(null, msg);
                } catch (IllegalAccessException e) {
                    log.error("init field :{} error", field.getName(), e);
                }
            }
        }
        SmartMenuMsg.SmartClickMsg smartClickMsg = new SmartMenuMsg.SmartClickMsg();
        SmartMenuMsg.SmartClickContent ck = new SmartMenuMsg.SmartClickContent();
        ck.setId(String.valueOf((RefundClickEnum.END_FLOW.getId())));
        ck.setContent(RefundClickEnum.END_FLOW.getAlias());
        smartClickMsg.setClick(ck);
        END_FLOW_ALIAS = smartClickMsg;
    }

    /**
     * 获取物流信息
     * @param itemType
     * @param userName
     * @param logisticsCompanys
     * @param logNos
     * @return
     */
    public static SmartMenuMsg getDeliveryMsg(Integer itemType, String userName, String logisticsCompanys, String logNos) {
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append(userName);
        if (ItemTypeEnum.CA.getValue() == itemType) {
            stringBuilder.append("同学你好，老师帮你确认了一下，目前你的证书已定制完成并生成物流单号了，证书上面有你的姓名＋学校＋证书唯一编号，收到证书可以在官方网站通过证书编号查询信息（https://ca114.net/#/），并且已提前支付了相关费用，无法退款了。\n\n");
            stringBuilder.append("证书具有以下作用：\n1、证书对毕业后找工作有帮助，可以写在你的简历中，提升简历含金量和竞争力。\n2、证书是参与活动的荣誉证明，具有收藏价值。\n\n");
        } else if (ItemTypeEnum.GIFT.getValue() == itemType) {
            stringBuilder.append("同学你好，老师帮你确认了一下，目前你的礼品已定制完成生成物流单号了，并且已提前支付了相关费用，无法退款了。礼品是本次活动的纪念礼品，具有收藏价值，耐心等待一下礼品的到来！\n\n");
        } else {
            stringBuilder.append("同学你好，老师帮你确认了一下，目前你的证书＋礼品已定制完成生成物流单号了，证书上面有你的姓名＋学校＋证书唯一编号，收到证书可以在官方网站通过证书编号查询信息（https://ca114.net/#/）并且已提前支付了相关费用，无法退款了。礼品是本次活动的纪念礼品，具有收藏价值。\n\n");
            stringBuilder.append("证书具有以下作用：\n1、证书对毕业后找工作有帮助，可以写在你的简历中，提升简历含金量和竞争力。\n2、证书是参与活动的荣誉证明，具有收藏价值。\n\n");
        }
        stringBuilder.append("物流公司:");
        stringBuilder.append(logisticsCompanys);
        stringBuilder.append("\n快递单号:");
        stringBuilder.append(logNos);
        stringBuilder.append("\n可复制快递单号，在百度直接搜索即可查看完整物流详情");
        stringBuilder.append("\n\n如有其他问题请点击选择：");
        SmartMenuMsg smartMenuMsg = new SmartMenuMsg();
        smartMenuMsg.setHeadContent(stringBuilder.toString());
        smartMenuMsg.addMsg(TRANSFER);
        smartMenuMsg.addMsg(END_FLOW_NEW);
        return smartMenuMsg;
    }

    /**
     * 获取物流新信息
     * @param itemType
     * @param userName
     * @param logisticsCompanys
     * @param logNos
     * @return
     */
    public static MsgObject getDeliveryNewMsg(Integer itemType, String userName, String logisticsCompanys, String logNos) {
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append(userName);
        if (ItemTypeEnum.CA.getValue() == itemType) {
            stringBuilder.append("同学你好，老师帮你确认了一下，目前你的证书已定制完成并生成物流单号了，证书上面有你的姓名＋学校＋证书唯一编号，收到证书可以在官方网站通过证书编号查询信息（https://ca114.net/#/）。并且已提前支付了相关费用，无法退款了。\n\n");
            stringBuilder.append("证书具有以下作用：\n1、证书对毕业后找工作有帮助，可以写在你的简历中，提升简历含金量和竞争力。\n2、证书是参与活动的荣誉证明，具有收藏价值。\n\n");
        } else if (ItemTypeEnum.GIFT.getValue() == itemType) {
            stringBuilder.append("同学你好，老师帮你确认了一下，目前你的礼品已定制完成生成物流单号了，并且已提前支付了相关费用，无法退款了。礼品是本次活动的纪念礼品，具有收藏价值，耐心等待一下礼品的到来！\n\n");
        } else {
            stringBuilder.append("同学你好，老师帮你确认了一下，目前你的证书＋礼品已定制完成生成物流单号了，证书上面有你的姓名＋学校＋证书唯一编号，收到证书可以在官方网站通过证书编号查询信息（https://ca114.net/#/）并且已提前支付了相关费用，无法退款了。礼品是本次活动的纪念礼品，具有收藏价值。\n\n");
            stringBuilder.append("证书具有以下作用：\n1、证书对毕业后找工作有帮助，可以写在你的简历中，提升简历含金量和竞争力。\n2、证书是参与活动的荣誉证明，具有收藏价值。\n\n");
        }
        stringBuilder.append("物流公司:");
        stringBuilder.append(logisticsCompanys);
        stringBuilder.append("\n快递单号:");
        stringBuilder.append(logNos);
        stringBuilder.append("\n可复制快递单号，在百度直接搜索即可查看完整物流详情");
        return setTextMsg(stringBuilder.toString());
    }

    /**
     * 没有物流12小时之内
     * @param itemType
     * @param userName
     * @return
     */
    public static SmartMenuMsg getNotDeliveryLess12Msg(Integer itemType, String userName) {
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append(userName);
        if (ItemTypeEnum.CA.getValue() == itemType) {
            stringBuilder.append("证书具有以下作用：\n1、证书对毕业后找工作有帮助，可以写在你的简历中，提升简历含金量和竞争力。\n2、证书是参与活动的荣誉证明，具有收藏价值。\n\n");
                        stringBuilder.append("只有达到条件的人才可以领取，请珍惜本次领取机会。\n");
        } else if (ItemTypeEnum.GIFT.getValue() == itemType) {
            stringBuilder.append("同学你好，礼品是本次活动的纪念礼品，具有收藏价值，每人只能领取一次。\n");
        } else {
            stringBuilder.append("同学你好，礼品是本次活动的纪念礼品，具有收藏价值，每人只能领取一次。\n");
            stringBuilder.append("同学证书具有以下作用：\n1、证书对毕业后找工作有帮助，可以写在你的简历中，提升简历含金量和竞争力。\n2、证书是参与活动的荣誉证明，具有收藏价值。\n\n");
                        stringBuilder.append("只有达到条件的人才可以领取，请珍惜本次领取机会。\n");
        }
        stringBuilder.append("\n如果想办理退款，请点击选择:");
        SmartMenuMsg smartMenuMsg = new SmartMenuMsg();
        smartMenuMsg.setHeadContent(stringBuilder.toString());
        smartMenuMsg.addMsg(NOT_DELIVERY_LESS12_CONFIRM);
        smartMenuMsg.addMsg(NOT_DELIVERY_LESS12_CANCEL);
        smartMenuMsg.addMsg(END_FLOW);
        return smartMenuMsg;
    }

    /**
     * 没有物流大于12小时
     * @param itemType
     * @param userName
     * @return
     */
    public static MsgObject getNotDeliveryMore12NewResponse(Integer itemType, String userName) {
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append(userName);
        if (ItemTypeEnum.CA.getValue() == itemType) {
            stringBuilder.append("同学你好，老师帮你确认了一下，目前你的证书正在定制中，证书上面有你的姓名＋学校＋证书唯一编号，收到证书可以在官方网站通过证书编号查询信息（https://ca114.net/#/），并且已提前支付了相关费用，无法退款了。\n\n");
            stringBuilder.append("证书具有以下作用：\n1、证书对毕业后找工作有帮助，可以写在你的简历中，提升简历含金量和竞争力。\n2、证书是参与活动的荣誉证明，具有收藏价值。\n\n");
        } else if (ItemTypeEnum.GIFT.getValue() == itemType) {
            stringBuilder.append("同学你好，老师帮你确认了一下，目前你的礼品正在定制中，并且已提前支付了相关费用，无法退款了。礼品是本次活动的纪念礼品，具有收藏价值，耐心等待一下礼品的到来！");
        } else {
            stringBuilder.append("同学你好，老师帮你确认了一下，目前你的证书＋礼品正在定制中，证书上面有你的姓名＋学校＋证书唯一编号，收到证书可以在官方网站通过证书编号查询信息（https://ca114.net/#/）并且已提前支付了相关费用，无法退款了。礼品是本次活动的纪念礼品，具有收藏价值。\n\n");
            stringBuilder.append("证书具有以下作用：\n1、证书对毕业后找工作有帮助，可以写在你的简历中，提升简历含金量和竞争力。\n2、证书是参与活动的荣誉证明，具有收藏价值。\n\n");
        }
        return setTextMsg(stringBuilder.toString());
    }

    public static SmartMenuMsg getNotDeliveryMore12Response(Integer itemType, String userName) {
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append(userName);
        if (ItemTypeEnum.CA.getValue() == itemType) {
            stringBuilder.append("同学你好，老师帮你确认了一下，目前你的证书正在定制中，证书上面有你的姓名＋学校＋证书唯一编号，收到证书可以在官方网站通过证书编号查询信息（https://ca114.net/#/），并且已提前支付了相关费用，无法退款了。\n\n");
            stringBuilder.append("证书具有以下作用：\n1、证书对毕业后找工作有帮助，可以写在你的简历中，提升简历含金量和竞争力。\n2、证书是参与活动的荣誉证明，具有收藏价值。\n\n");
        } else if (ItemTypeEnum.GIFT.getValue() == itemType) {
            stringBuilder.append("同学你好，老师帮你确认了一下，目前你的礼品正在定制中，并且已提前支付了相关费用，无法退款了。礼品是本次活动的纪念礼品，具有收藏价值，耐心等待一下礼品的到来！\n\n");
        } else {
            stringBuilder.append("同学你好，老师帮你确认了一下，目前你的证书＋礼品正在定制中，证书上面有你的姓名＋学校＋证书唯一编号，收到证书可以在官方网站通过证书编号查询信息（https://ca114.net/#/）并且已提前支付了相关费用，无法退款了。礼品是本次活动的纪念礼品，具有收藏价值。\n\n");
            stringBuilder.append("证书具有以下作用：\n1、证书对毕业后找工作有帮助，可以写在你的简历中，提升简历含金量和竞争力。\n2、证书是参与活动的荣誉证明，具有收藏价值。\n\n");
        }
        stringBuilder.append("如有其他问题请点击选择：");
        SmartMenuMsg smartMenuMsg = new SmartMenuMsg();
        smartMenuMsg.setHeadContent(stringBuilder.toString());
        smartMenuMsg.addMsg(TRANSFER);
        smartMenuMsg.addMsg(END_FLOW_NEW);
        return smartMenuMsg;
    }

    public static MsgObject getRefundFlowEndWithTransferMsg() {
        SmartMenuMsg smartMenuMsg = new SmartMenuMsg();
        smartMenuMsg.setHeadContent("感谢你的咨询，本轮对话已结束，若还有问题，请选择：\n");
        smartMenuMsg.addMsg(TRANSFER);
        return smartMenuMsg;
    }

    /**
     * 获取无退款点击消息
     * @param itemType
     * @return
     */
    public static TextMsg getNotRefundClickMsg(Integer itemType) {
        String itemTypeMsg = ItemTypeEnum.getName(itemType);
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("嗯好的，那等待你的");
        stringBuilder.append(itemTypeMsg);
        stringBuilder.append("送达哦。\n\n因为");
        stringBuilder.append(itemTypeMsg);
        stringBuilder.append("需要定制和审核，需要一定周期（具体时间可查看订单页面）。 采用顺丰/邮政/邮政EMS邮寄，一般发货后2-3天左右送达，具体需要参考物流更新情况。。\n\n");
        stringBuilder.append("物流单号可在发货后点击此链接自行查看 https://s.dreambeat.cn/6iAqyu4174 （用收货手机号登录） ，若暂时查不到单号，说明还在定制中，请耐心等待。 \n\n");
        TextMsg textMsg = new TextMsg();
        textMsg.setContent(stringBuilder.toString());
        return textMsg;
    }

    public static TextMsg getDeliveryNotRefundClickMsg(String userName, String logisticsCompany, String logNos) {
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append(userName);
        stringBuilder.append("同学你好，这是你的物流单号\n\n");
        stringBuilder.append("物流公司:");
        stringBuilder.append(logisticsCompany);
        stringBuilder.append("\n快递单号:");
        stringBuilder.append(logNos);
        stringBuilder.append("\n\n可复制快递单号，在百度直接搜索即可查看完整物流详情");
        return setTextMsg(stringBuilder.toString());
    }

    public static TextMsg getDeliveryLogicUpdateMsg(String userName, String logisticsCompany, String logNos,String address) {
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append(userName);
        stringBuilder.append("同学你好，这是你的物流单号\n");
        stringBuilder.append("物流公司:");
        stringBuilder.append(logisticsCompany);
        stringBuilder.append("\n快递单号:");
        stringBuilder.append(logNos);
        stringBuilder.append("\n快递最新信息:");
        stringBuilder.append(address);
        stringBuilder.append("\n\n可复制快递单号，在百度直接搜索即可查看完整物流详情");
        return setTextMsg(stringBuilder.toString());
    }

    public static TextMsg getDeliveryLess3DayNotLogicMsg(String userName) {
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append(userName);
        stringBuilder.append("同学你好，快递公司已经为你生成了快递单号，但是目前还在陆续扫描出库，当快递公司完成扫描出库并给平台进行数据同步后，才可以看见物流详情。快递公司要发货的整体单量较大，所以扫描出库会有一定程度延迟，请理解并耐心等待，3-5天后请点击下方链接，再次查看物流详情。\nhttps://s.dreambeat.cn/6iAqyu4174（用收货手机号登录）");
        return setTextMsg(stringBuilder.toString());
    }

    public static SmartMenuMsg getNotDeliveryLess12RefundClickMsg(String userName, Integer itemType) {
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append(userName);
        if (ItemTypeEnum.CA.getValue() == itemType || ItemTypeEnum.CA_AND_GIFT.getValue() == itemType) {

            stringBuilder.append("同学你好，证书上面有你的姓名＋学校＋证书唯一编号，收到证书可以在官方网站通过证书编号查询信息（https://ca114.net/#/）\n" );
            stringBuilder.append("证书具有以下作用：\n1、证书对毕业后找工作有帮助，可以写在你的简历中，提升简历含金量和竞争力。\n2、证书是参与活动的荣誉证明，具有收藏价值。\n\n");

        } else if (ItemTypeEnum.GIFT.getValue() == itemType) {
            stringBuilder.append("同学你好，礼品是本次活动的纪念礼品，具有收藏价值，每人只能领取一次。\n" );
            stringBuilder.append("\n是否继续退款？");
        }
        SmartMenuMsg smartMenuMsg = new SmartMenuMsg();
        smartMenuMsg.setHeadContent(stringBuilder.toString());
        smartMenuMsg.addMsg(NOT_DELIVERY_REFUND_CONFIRM);
        smartMenuMsg.addMsg(NOT_DELIVERY_REFUND_CANCEL);
        smartMenuMsg.addMsg(END_FLOW);
        return smartMenuMsg;
    }

    public static MsgObject getErrorOrderNoMsg() {
        return setTextMsg("同学你好，请发送正确格式的订单编号帮你查询：\n\n正确格式的订单编号示例：2022102997119176XX");
    }

    public static MsgObject getErrorOrderNoAndPhoneRefundMsg() {
        return setTextMsg("你好，你发的格式有误\n\n请一次性发送“订单编号+收货手机号”帮你查询。\n请确保发送格式正确，以免无法退款。\n\n正确格式示例（请使用键盘自带符号里的“＋”，请勿换行）：\n202203299711917233+13200000000");
    }


    public static MsgObject getErrorOrderNoAndPhoneQueryMsg() {
        return setTextMsg("你好，你发的格式有误\n\n请一次性发送“订单编号+收货手机号”帮你查询。\n请确保发送格式正确，以免无法查询。\n\n正确格式示例（请使用键盘自带符号里的“＋”，请勿换行）：\n202203299711917233+13200000000");
    }

    public static MsgObject getUserFirstInMsg() {
        return setTextMsg("正在帮您查询，请稍等");
    }

    public static MsgObject getTimeOutMsg() {
        return setTextMsg("同学由于你发起的流程处理时间过长，已经超时了，请重新输入关键字发起流程");
    }

    public static MsgObject getNotServerTimeMsg() {
        return setTextMsg("同学你好，请在客服工作时间联系（9：30-23：00）");
    }

    public static MsgObject getFlowEndMsg() {
        return setTextMsg("感谢你的咨询，本轮对话已经结束，若还有问题，请重新咨询。");
    }

    public static MsgObject getQueryFlowEndWithTransferMsg() {
        SmartMenuMsg smartMenuMsg = new SmartMenuMsg();
        smartMenuMsg.setHeadContent("本次查询已结束，如还需查询，请重新发起或点击:\n");
        smartMenuMsg.addMsg(TRANSFER);
        return smartMenuMsg;
    }

    public static MsgObject getQueryFlowEndMsg() {
        return setTextMsg("本次查询已结束，如还需查询，请重新发起");
    }

    public static MsgObject getNotPayEndMsg(String userName) {
        return setTextMsg(userName + "同学你好，你查询的订单暂未支付！");
    }

    public static MsgObject getRefundOrderNotExistMsg() {
        return setTextMsg("同学你好, 你查询的订单信息不存在，请输入正确的”订单编号＋收货手机号“");
    }

    public static MsgObject getQueryOrderNotExistMsg() {
        return setTextMsg("同学你好, 你查询的订单信息不存在");
    }

    public static MsgObject getQueryOrderPhoneNotEqInputPhoneMsg() {
        return setTextMsg("同学你好，你输入的收货手机号和订单编号中的收货手机号不一致");
    }

    public static MsgObject getOrderPhoneNotEqInputPhoneMsg() {
        return setTextMsg("同学你好，你输入的收货手机号和订单编号中的收货手机号不一致，请重新输入：订单编号+收货手机号");
    }

    public static TextMsg getAlreadyRefundMsg(String refundStatus, String userName) {
        TextMsg textMsg = new TextMsg();
        textMsg.setContent(userName + "同学你好，经核查你的订单已为你办理退款，目前退款已到账，可查看微信/支付宝账单！");
        // 退款中
        if ("2".equals(refundStatus)) {
            textMsg.setContent(userName + "同学你好，经核查你的订单已为你办理退款，目前退款处理中，稍后可查看微信/支付宝账单！");
        }
        return textMsg;
    }

    public static TextMsg getWorkDayNotDeliveryLess9Msg(String userName, int num) {
        TextMsg textMsg = new TextMsg();
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append(userName);
        stringBuilder.append("同学你好，今天是领取后的第");
        stringBuilder.append(num);
        stringBuilder.append("个工作日，目前还在定制周期内，请耐心等待！\n因为需要定制和审核，需要一定周期（具体时间可查看订单页面）。 采用顺丰/邮政/邮政EMS邮寄，一般发货后2-3天左右送达，具体需要参考物流更新情况。\n\n物流单号可在发货后点击此链接自行查看 https://s.dreambeat.cn/6iAqyu4174 （用收货手机号登录） ，若暂时查不到单号，说明还在定制中，请耐心等待。 \n\n");
        textMsg.setContent(stringBuilder.toString());
        return textMsg;
    }

    public static TextMsg getWorkDayNotDeliveryMore9Msg(String userName) {
        TextMsg textMsg = new TextMsg();
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append(userName);
        stringBuilder.append("");
        textMsg.setContent(stringBuilder.toString());
        return textMsg;
    }


    public static TextMsg getCurrentDayNotDeliveryMsg(String userName) {
        TextMsg textMsg = new TextMsg();
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append(userName);
        stringBuilder.append("同学你好，因为证书/礼品需要定制和审核，需要一定周期（具体时间可查看订单页面）。 采用顺丰/邮政/邮政EMS邮寄，一般发货后2-3天左右送达，具体需要参考物流更新情况。 \n\n 物流单号可在发货后点击此链接自行查看 https://s.dreambeat.cn/6iAqyu4174 （用收货手机号登录） ，若暂时查不到单号，说明还在定制中，请耐心等待。 \n\n ");
        textMsg.setContent(stringBuilder.toString());
        return textMsg;
    }


    public static TextMsg getConfirmRefundClickMsg() {
        return setTextMsg("同学你好，你的退款请求已受理，预计2个小时内系统自动完成退款，费用会原路返回注意查收!");
    }

    public static TextMsg getSubOrderNotExistMsg() {
        return setTextMsg("订单退款子订单不存在");
    }

    public static TextMsg setTextMsg(String msg) {
        TextMsg textMsg = new TextMsg();
        textMsg.setContent(msg);
        return textMsg;
    }

    public static SmartMenuMsg getEndFlowMenuMsg(String cacheOrderNo) {
        SmartMenuMsg smartMenuMsg = new SmartMenuMsg();
        smartMenuMsg.setHeadContent("同学你好, 目前正在处理订单：" + cacheOrderNo + "\n" +
                "可以结束流程，重新输入关键字处理");
        smartMenuMsg.addMsg(END_FLOW_ALIAS);
        return smartMenuMsg;
    }

    public static String getLogisticsNosStr(String logisticsNo, List<String> logisticsNos) {
        if (CollectionUtils.isEmpty(logisticsNos)) {
            logisticsNos = new ArrayList<>();
        }
        if (StringUtils.isNotBlank(logisticsNo)) {
            logisticsNos.add(logisticsNo);
        }
        return logisticsNos.stream().distinct().collect(Collectors.joining(","));
    }
}
